<!DOCTYPE html>
<html>
  <head>
    <meta charset="utf-8">
    <meta name="viewport" content="initial-scale=1.0, maximum-scale=1.0, user-scalable=no" />
    <title>移动执法</title>
    <script type="text/javascript">
      // 所内跟办公用的网络是一样的,狱内是单独的
      // 内网(办公模式) com.zf.bg
      // let url = 'http://172.26.76.89/app/index.html?timertamp=' + new Date().getTime().toString() + '&mode=bg'
      // 内网(狱内模式) com.zf.yn
      // let url = 'http://172.26.76.89/app/index.html?timertamp='+new Date().getTime().toString()+'&mode=yn'
      // 内网(所内模式) com.zf.sn 没有所内
      // let url = 'http://172.26.76.89/app/index.html?timertamp=' + new Date().getTime().toString() + '&mode=sn'
      // 测试服
      // let url = 'http://39.103.144.150:10091/app/index.html?timertamp=' + new Date().getTime().toString()
      // 本地
      let url = 'http://192.168.8.112:11224?timertamp=' + new Date().getTime().toString() + '&mode=bg'
      // let url = 'http://192.168.8.230:10091/app/index.html?timertamp=' + new Date().getTime().toString() + '&mode=bg'
      let startView = null;
      let errorView = null;
      let embed = null;
      let timer = null;
      let timeout = 10 * 1000;
      document.addEventListener('plusready', function() {
        url = addParamsToUrl(url, getmdmsdk())
        console.log(url)
        startView = plus.webview.create('/html/start.html', 'start')
        errorView = plus.webview.create('/html/error.html', 'error')
        createWebView()
        document.addEventListener("resume", onAppReume, false);
        // document.addEventListener("pause", onAppReume, false);
        document.addEventListener("netchange", onAppReume, false);
        document.addEventListener("newintent", onAppReume, false);
        // document.addEventListener("background", onAppReume, false);
        document.addEventListener("foreground", onAppReume, false);
      }, false);
      //创建webview页面
      function createWebView() {
        startView.show()
        if (!timer) {
          timer = setTimeout(embedError, timeout)
        }
        if (!embed) {
          plus.nativeUI.showWaiting("加载中...");
          embed = plus.webview.create(url, 'index', {
            render: 'always',
            errorPage: './html/error.html'
          });
          embed.onloaded = embedLoaded;
          embed.onerror = embedError;
        } else {
          embed.loadURL(url)
        }
      }
      // 后台切换回前台
      function onAppReume() {
        if (embed) {
          checkWebview()
        } else {
          createWebView()
        }
      }
      // 检测Webview窗口是否渲染完成
      function checkWebview() {
        embed.checkRenderedContent({}, function(e) {
          if (e.rendered === true || e.rendered === 'true') {
            if (embed.getURL().includes('/html/error.html')) {
              plus.nativeUI.showWaiting("加载中...");
              embed.loadURL(url)
            }
          }
        }, function(e) {
          console.log('checkRenderedContent error: ' + JSON.stringify(e));
        });
      }

      function embedError() {
        plus.nativeUI.closeWaiting();
        plus.navigator.closeSplashscreen();
        startView && startView.hide();
        timer && clearTimeout(timer);
        errorView.show();
      }

      // 页面加载完成事件回调函数
      function embedLoaded() {
        plus.nativeUI.closeWaiting();
        plus.navigator.closeSplashscreen();
        startView && startView.hide();
        timer && clearTimeout(timer);
        embed.show();
      }

      // 电信易通移动终端管控平台 获取设备信息
      function getmdmsdk() {
        const data = {
          userName: null, // 姓名 
          phoneNum: null, // 注册手机号
          idNumber: null, // 身份证号
          imei: null, // IMEI
          imsi: null, // IMSI
          iccid: null // ICCID
        }
        // 获取Android类
        const Uri = plus.android.importClass("android.net.Uri");
        const Bundle = plus.android.importClass("android.os.Bundle");

        // 获取上下文
        const context = plus.android.runtimeMainActivity();

        // 定义要访问的ContentProvider的URI
        const uri = Uri.parse("content://com.newmobiler.portal.provider.mdmsdk");

        // 创建并设置Bundle参数
        const bundle = new Bundle();
        // bundle.putString("pkg", context.getPackageName());
        bundle.putString("pkg", "com.zf.bg");

        // 执行call方法（使用反射，兼容不同H5+版本）
        try {
          const resolver = context.getContentResolver();
          plus.android.importClass(resolver);
          const result = resolver.call(uri, "deviceInfoV2", "info", bundle);

          if (result != null) {
            data.userName = result.getString("userName")
            data.phoneNum = result.getString("phoneNum")
            data.idNumber = result.getString("idNumber")
            data.imei = result.getString("imei")
            data.imsi = result.getString("imsi")
            data.iccid = result.getString("iccid")
          }
        } catch (e) {
          console.error("调用ContentProvider失败:", e);
        }
        return data
      };

      /**
       * 根据对象为URL添加参数
       * @param {string} url - 原始URL
       * @param {Object} params - 要添加的参数对象
       * @param {Object} [options] - 可选配置项
       * @param {boolean} [options.encode=true] - 是否对参数值进行编码
       * @param {boolean} [options.arrayFormat='bracket'] - 数组序列化格式：'bracket' | 'comma' | 'index'
       * @param {boolean} [options.objectFormat='dot'] - 对象序列化格式：'dot' | 'bracket'
       * @returns {string} - 添加参数后的URL
       */
      function addParamsToUrl(url, params, options = {}) {
        // 合并默认配置
        const {
          encode = true,
            arrayFormat = 'bracket',
            objectFormat = 'dot'
        } = options;

        // 解析URL
        const urlObj = new URL(url);

        // 处理参数对象
        Object.entries(params).forEach(([key, value]) => {
          // 处理数组类型参数
          if (Array.isArray(value)) {
            switch (arrayFormat) {
              case 'comma':
                urlObj.searchParams.set(key, value.join(','));
                break;

              case 'index':
                value.forEach((item, index) => {
                  urlObj.searchParams.append(`${key}[${index}]`, serializeValue(item, encode));
                });
                break;

              case 'bracket':
              default:
                value.forEach(item => {
                  urlObj.searchParams.append(`${key}[]`, serializeValue(item, encode));
                });
                break;
            }
          }
          // 处理对象类型参数
          else if (typeof value === 'object' && value !== null) {
            switch (objectFormat) {
              case 'bracket':
                Object.entries(value).forEach(([subKey, subValue]) => {
                  urlObj.searchParams.append(`${key}[${subKey}]`, serializeValue(subValue, encode));
                });
                break;

              case 'dot':
              default:
                Object.entries(value).forEach(([subKey, subValue]) => {
                  urlObj.searchParams.append(`${key}.${subKey}`, serializeValue(subValue, encode));
                });
                break;
            }
          }
          // 处理基本类型参数
          else {
            urlObj.searchParams.set(key, serializeValue(value, encode));
          }
        });

        return urlObj.toString();
      }

      /**
       * 序列化参数值
       * @param {*} value - 参数值
       * @param {boolean} encode - 是否编码
       * @returns {string} - 序列化后的字符串
       */
      function serializeValue(value, encode) {
        if (value === undefined || value === null) {
          return '';
        }

        const strValue = String(value);
        return encode ? encodeURIComponent(strValue) : strValue;
      }
    </script>
  </head>
  <body>
  </body>
</html>